% GAUTIER LE BIHAN - 2020
% Replication files for “Shocks vs Menu Costs: Patterns of Price Rigidity in an Estimated Multi-Sector Menu-Cost Model�? –Review of Economics and Statistics
%
% Estimates Menu cost model based on mean , then on median moments
% Produce input for table 2 Panel A 


clear all
close all
clear matrix
clc

addpath('..\..\Utilities')  
load actual_moments_k


load res_1sect19d;
param0=res_1sect19d;

actual_moments=[ 0.0837  0.6737  0.0438  0.0698  4.4616;
                 0.1370 0.7096 0.0473 0.0728 5.2872]
 
actual_std=[ 0.0008  0.0042  0.0005  0.0010  0.1057;
             0.0010  0.0051 0.0007   0.0017  0.2457]
 actual_var= actual_std.* actual_std*1000;


for jj=1:2;
    
p00 = param0(jj,1);%param0(jj,1); 
mu_c0 =param0(jj,2);%param0(jj,2)+param0(jj,2)/5 ;
sig_eps_a0=log(exp(param0(jj,3)));%param0(jj,3);


p0_init = p00;
mu_c_init = mu_c0;
sig_eps_a_init = sig_eps_a0;
%rho_a_init = rho_a0;


% Adjustement of initial search area (beyond 5 percent)

power_p0 = 1.00;
power_mu_c = 1.000000;
power_sig_eps_a = 1.000000;
%power_rho_a = 1.00000000;

% save SMM

% create vector for initial parameter values
vec0 = [p00; mu_c0; sig_eps_a0];

% Keep track of results
conv_SMM = zeros(0,3);
xopt_SMM = 100000; % start iteration
conv_opt = zeros(3,6);
SMM_count = 0; % counter

% tolerance level
tol_SMM = 1e-3;


weight_j=0.57;
save('SMM','vec0','p00','mu_c0','sig_eps_a0',...
    'p0_init','mu_c_init','sig_eps_a_init',...
    'power_p0','power_mu_c','power_sig_eps_a',...
    'conv_SMM','xopt_SMM','conv_opt','SMM_count',...
    'tol_SMM','-append')
% 'power_phi','phi_init','phi0'

%% Options
%  Display, TolX, TolFun, MaxFunEvals

%% Set calibration target
% std.Y, autocorr(Y), frequency of default:
moment1 = actual_moments(jj,1);
moment2 = actual_moments(jj,2);
moment3 = actual_moments(jj,3);
moment4 = actual_moments(jj,4); 
moment5 = actual_moments(jj,5);





%moment6 = actual_moments(jj,7);
%moment7 = actual_moments(jj,3);


target = [moment1; moment2; moment3; moment4; moment5];
scale=[actual_var(jj,:)'];
save('SMM','target','scale','-append')
%% Start minimization routine 
 options = optimset('MaxIter',20);%, 'TolX', 1e-4,'Tolfun', 1e-3);
 options = optimset('TolX', 1e-4,'Tolfun', 1e-3);
options = optimset('MaxFunEvals',50);

[x,fval, exiflag] = fminsearch(@SMMmain,vec0, options);
res_1sect19e(jj,:)=[x' fval exiflag target']

 %Save results 
  save res_1sect19e res_1sect19e;
 
end